package com.xuecheng.system.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xuecheng.api.system.model.dto.CourseCategoryDTO;
import com.xuecheng.api.system.model.dto.CourseCategoryOperDTO;
import com.xuecheng.common.domain.response.RestResponse;
import com.xuecheng.system.convert.CourseCategoryConvert;
import com.xuecheng.system.entity.CourseCategory;
import com.xuecheng.system.entity.ext.CourseCategoryNode;
import com.xuecheng.system.mapper.CourseCategoryMapper;
import com.xuecheng.system.service.CourseCategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 课程分类 服务实现类
 * </p>
 *
 * @author itcast
 */
@Slf4j
@Service
public class CourseCategoryServiceImpl extends ServiceImpl<CourseCategoryMapper, CourseCategory> implements CourseCategoryService {
    @Autowired
    private CourseCategoryMapper courseCategoryMapper;

    public List<CourseCategoryDTO> queryTreeNodes() {
        QueryWrapper<CourseCategory> qw = new QueryWrapper<>();
        List<CourseCategory> courseCategories = courseCategoryMapper.selectList(qw);
        List<CourseCategoryDTO> courseCategoryDTOS = new ArrayList<>();
        for (CourseCategory courseCategory : courseCategories) {
            CourseCategoryDTO courseCategoryDTO = CourseCategoryConvert.INSTANCE.entity2dto(courseCategory);
            courseCategoryDTOS.add(courseCategoryDTO);
        }
        courseCategoryDTOS.forEach(System.out::println);
        // 如何在mp对service封装中来获得mapper自定义的方法
        // mp中的service层封装里有个方法可以获得mapper的代理对象：getBaseMapper
        // pojo转dto  CourseCategoryConvert.INSTANCE.nodes2dtos(courseCategoryNodes)
//        CourseCategoryConvert.INSTANCE
        return courseCategoryDTOS;
    }

    @Override
    public RestResponse<List<CourseCategory>> queryParentLists() {
        // 1.查询数据(注意条件)
        // 2.判断查询后的数据
        return null;

    }

    @Override
    public RestResponse add(CourseCategoryDTO categoryDTO) {
        //1 dto -> entity CourseCategoryConvert.INSTANCE.dto2entity();
        //2 参数校验(注意 parentid字段校验是否是父分类问题)

        //3 执行修改操作
        //4 返回结果 (新增成功/新增失败)
        return null;
    }

    @Override
    public RestResponse moveTo(CourseCategoryOperDTO categoryOperDTO) {
        // 1 根据id查询课程分类
        // 2 判断操作类型
        //2.1 上移操作
        // 查询当前记录的上一条记录
        //获取上一条记录
        // 交换sort
        //2.2 下移操作
        // 查询当前记录的下一条记录
        //获取下一条记录
        // 交换sort
        //3 更新数据库
        //4 返回执行结果
        return null;
    }

    @Override
    public RestResponse delete(String courseCategoryId) {
        // 1 根据id查询课程分类
        // 2 如果删除的是 父分类,需要先判断当前分类下是否有子分类,如果有则不允许删除
        //3 执行删除
        //4 返回执行结果
        return null;
    }

    @Override
    public RestResponse edit(CourseCategoryDTO categoryDTO) {
        //1 dto -> entity
        //2 参数校验
        //3 执行修改操作
        //4 返回结果
        return null;
    }


    public RestResponse<CourseCategoryDTO> getCourseCategoryById4s(String id) {

        // 1.判断关键数据

        // 2.根据id查询数据

        // 3.判断查询后的数据

        return null;

    }
}
